package com.droid.users.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.droid.objetivos.facade.ObjetivoFacade;
import com.droid.persistor.dao.Gasto;
import com.droid.persistor.dao.Objetivo;
import com.droid.persistor.dao.Usuario;
import com.droid.persistor.facade.PersistorFacade;
import com.droid.users.util.XPDroidConstants;

public class ObjetivoServlet extends HttpServlet {

	protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();

		String operation, mensaje;
		String nombreobj, finicio, fin, mail;
		Float monto;
		Number idusuario, idobjetivo;
		ObjetivoFacade facade = new ObjetivoFacade();
		operation = request.getParameter(XPDroidConstants.PARAMETRO_OPERACION);
		switch (operation) {
		case XPDroidConstants.OPERATION_ALTA_OBJETIVO:
			nombreobj = request
					.getParameter(XPDroidConstants.PARAMETRO_NOMBRE_OBJETIVO);
			finicio = request
					.getParameter(XPDroidConstants.PARAMETRO_FINICIO_OBJETIVO);
			fin = request.getParameter(XPDroidConstants.PARAMETRO_FIN_OBJETIVO);
			monto = Float.parseFloat(request
					.getParameter(XPDroidConstants.PARAMETRO_MONTO));
			idusuario = Integer.parseInt(request
					.getParameter(XPDroidConstants.PARAMETRO_IDUSUARIO));

			mensaje = facade.altaObjetivo(nombreobj, finicio, fin, monto,
					idusuario);
			out.append(mensaje);
			break;
		case XPDroidConstants.OPERATION_BAJA_OBJETIVO:

			idusuario = Integer.parseInt(request
					.getParameter(XPDroidConstants.PARAMETRO_IDUSUARIO));

			mensaje = facade.bajaObjetivo(idusuario);
			out.append(mensaje);
			break;
		case XPDroidConstants.OPERATION_MODIFICAR_OBJETIVO:

			nombreobj = request
					.getParameter(XPDroidConstants.PARAMETRO_NOMBRE_OBJETIVO);
			finicio = request
					.getParameter(XPDroidConstants.PARAMETRO_FINICIO_OBJETIVO);
			fin = request.getParameter(XPDroidConstants.PARAMETRO_FIN_OBJETIVO);
			monto = Float.parseFloat(request
					.getParameter(XPDroidConstants.PARAMETRO_MONTO));
			idusuario = Integer.parseInt(request
					.getParameter(XPDroidConstants.PARAMETRO_IDUSUARIO));

			mensaje = facade.modificaObjetivo(nombreobj, finicio, fin, monto,
					idusuario);
			out.append(mensaje);
			break;
		case XPDroidConstants.OPERATION_CHECK_OBJETIVO:

			idobjetivo = Integer.parseInt(request
					.getParameter(XPDroidConstants.PARAMETRO_IDOBJETIVO));

			mensaje = facade.checkObjetivo(idobjetivo);
			out.append(mensaje);
			break;
		case XPDroidConstants.OPERATION_LISTAR_OBJETIVOS:
			mail = request
					.getParameter(XPDroidConstants.PARAMETRO_NOMBRE_EMAIL);

			PersistorFacade pFacade = new PersistorFacade();
			Usuario usu = pFacade.obtenerUsuario(mail);

			ArrayList<Objetivo> resp = pFacade.getListaObjetivosUsuario(usu
					.getIdUsuario());

			String xml = " ";
			response.setContentType("text/xml;charset=UTF-8");
			PrintWriter writer = response.getWriter();
			writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
			writer.append("<lista_objetivos>");
			writer.append("<usuario>");
			writer.append("<mail>").append(mail).append("</mail>");
			writer.append("</usuario>");

			// writer.append("<objetivos>");

			for (int i = 0; i < resp.size(); i++) {

				writer.append("<objetivos>");
				writer.append("<nombre>").append(resp.get(i).getNombre())
						.append("</nombre>");
				writer.append("<fecha_inicio>")
						.append(resp.get(i).getFfinicio())
						.append("</fecha_inicio>");
				writer.append("<fecha_fin>").append(resp.get(i).getFfin())
						.append("</fecha_fin>");
				writer.append("<monto>")
						.append(resp.get(i).getMonto().toString())
						.append("</monto>");
				writer.append("</objetivos>");
			}

			// writer.append("</objetivos>");
			writer.append("</lista_objetivos>");
			writer.write(xml);
			break;
		// case XPDroidConstants.OPERATION_LISTAR_OBJETIVOS:
		// mail = request
		// .getParameter(XPDroidConstants.PARAMETRO_NOMBRE_EMAIL);
		//
		// PersistorFacade pFacade = new PersistorFacade();
		// Usuario usu = pFacade.obtenerUsuario(mail);
		//
		// ArrayList<Objetivo> resp =
		// pFacade.getListaObjetivosUsuario(usu.getIdUsuario());
		//
		// for (int i = 0; i < resp.size(); i++) {
		//
		// mensaje=resp.get(i).getNombre() + " "
		// + resp.get(i).getFfinicio()+ " " + resp.get(i).getFfin()
		// + " " + resp.get(i).getMonto() + XPDroidConstants.newLine; // access
		// with get() method
		// out.append(mensaje);
		//
		//
		// }
		// break;
		default:
			mensaje = "Parametro incorrecto";
			out.append(mensaje);

			break;

		}
	}

	/**
	 * Handles the HTTP <code>GET</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		processRequest(request, response);

	}

	/**
	 * Handles the HTTP <code>POST</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
